/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


import weka.core.Instances;
import weka.core.Attribute;

import java.util.Random;
import java.io.*;
import java.util.ArrayList;
import weka.classifiers.trees.tdit.TDIDTTree;
import weka.classifiers.trees.tdit.Criteria;


import java.util.ArrayList;
import java.math.*;

/**
 *
 * @author frpp
 */


public class InfoGainCriteria implements Criteria, Serializable{
    
    /**
     * Método de selección según la entropía.
     * 
     * @param data
     * @param unused
     * @return El atributo que máximiza la entropia.
     */
    public Attribute getNext(Instances data, ArrayList<Attribute> unused){
        Attribute selected = null;
        double E_orig = 0; //Entropia de la variable clase.
        
        ArrayList <String> Class = new ArrayList <String>();
        ArrayList <Double> E_nueva = new ArrayList <Double>(); //Vector de ganancia.
        
        String aux = "";
                   
        
          //Comprobamos el número de clases diferentes que hay en el conjunto de instancias.
            aux = (String) (data.firstInstance()).getClass();
            Class.set(0, aux);
            for(int i = 0; i < data.numInstances(); ++i){
                for(int j = 0; j < )
                if()
            
            }
        
        
          //Calculamos el nº de atributos de cada clase.
            for(int i = 0; i < data.numInstances(); ++i){
                
                if()
                E_nueva +=    data.attribute(i);
                
            }
          //Calculamos el valor de la variable clase sin usar ningñun atributo.  
            for(int j= 0; j < data.size(); ++j)
                E_nueva += (/data.numInstances())*(Math.log(  /data.numInstances())   ); //Comprobar que hace la función logaritmo en base 2 (Revisar!!!)

            
            
            
            //Calcular el valor de la Ganancia (E) según la slección de los diferentes atributos.
            
            
            
            
            
            
            
            
            
        // Gets the selected attribute
        selected = unused.get(0);
        
        // Se devuelve el seleccionado
        return selected;
    }
    
}
